/**
 * 
 */
package com.naiterui.ehp.bp.domain;

import static javax.persistence.GenerationType.IDENTITY;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 账单表
 * @author fangguanhong
 * @since 2.0.0
 */
@Entity
@Table(name = "consult_bill")
public class ConsultBill implements Serializable {

    // --------------- 支付方式枚举 ---------------- //
    /**
     * 支付方式-未知：<code>PAY_TYPE_UNKNOWN</code>
     */
    public static final int PAY_TYPE_UNKNOWN = 0;
    /**
     * 支付方式-余额支付：<code>PAY_TYPE_BALANCE</code>
     */
    public static final int PAY_TYPE_BALANCE = 1;
    /**
     * 支付方式-第三方支付：<code>PAY_TYPE_THIRD</code>
     */
    public static final int PAY_TYPE_THIRD = 2;
    /**
     * 支付方式-混合支付：<code>PAY_TYPE_MIXED</code>
     */
    public static final int PAY_TYPE_MIXED = 3;

    // --------------- 支付状态枚举 ---------------- //
    /**
     * 支付状态-未支付：<code>PAY_STATUS_NO_PAID</code>
     */
    public static final int PAY_STATUS_NO_PAID = 0;
    /**
     * 支付状态-已支付：<code>PAY_STATUS_PAID</code>
     */
    public static final int PAY_STATUS_PAID = 1;

    // --------------- 账单来源类型枚举 ----------------- //
    /**
     * 账单来源-正常收费账单：<code>RESOURCE_TYPE_NORMAL</code>
     */
    public static final int RESOURCE_TYPE_NORMAL = 0;
    /**
     * 账单来源-医生免单：<code>RESOURCE_TYPE_FREE</code>
     */
    public static final int RESOURCE_TYPE_FREE = 1;
    /**
     * 账单来源-未开启收费：<code>RESOURCE_TYPE_NO_CHARGE</code>
     */
    public static final int RESOURCE_TYPE_NO_CHARGE = 2;
    /**
     * 账单来源-医生发起：<code>RESOURCE_TYPE_DOCTOR</code>
     */
    public static final int RESOURCE_TYPE_FROM_DR = 3;

    // -------------- 第三方支付商户类别 --------------- //
    /**
     * 第三方支付商户类别-未知：<code>THIRD_TYPE_UNKNOWN</code>
     */
    public static final int THIRD_TYPE_UNKNOWN = 0;
    /**
     * 第三方支付商户类别-微信支付：<code>THIRD_TYPE_WEIXIN</code>
     */
    public static final int THIRD_TYPE_WEIXIN = 1;

    private static final long serialVersionUID = -5438076565824693383L;

    /**
     * 主键：<code>id</code>
     */
    private Long id;
    /**
     * 患者ID：<code>patientId</code>
     */
    private Long patientId;
    /**
     * 医生ID：<code>doctorId</code>
     */
    private Long doctorId;
    /**
     * 应付金额，单位：分：<code>amount</code>
     */
    private Integer amount;
    /**
     * 实付金额，单位：分：<code>payAmount</code>
     */
    private Integer payAmount;
    /**
     * 抵扣金额，单位：分：<code>discountAmount</code>
     */
    private Integer discountAmount;
    /**
     * 来源类型，0：正常；1：免单；2：未开启收费；3：医生主动发起：<code>resourceType</code>
     */
    private Integer resourceType;
    /**
     * 账单创建时间：<code>createdAt</code>
     */
    private Date createdAt;
    /**
     * 支付时间：<code>payTime</code>
     */
    private Date payTime;
    /**
     * 支付状态，0：未支付；1：已支付：<code>payStatus</code>
     */
    private Integer payStatus;

    /**
     * 支付方式： 1：余额支付；2：第三方支付；3：组合支付<code>payType</code>
     */
    private Integer payType;
    /**
     * 第三方支付商家类型： 0：未知；1：微信：<code>thirdType</code>
     */
    private Integer thirdType;
    /**
     * 余额支付金额：<code>balancePay</code>
     */
    private Integer balancePay;
    /**
     * 第三方支付金额：<code>thirdPay</code>
     */
    private Integer thirdPay;

    public ConsultBill() {
        this.payType = PAY_TYPE_UNKNOWN;
        this.thirdType = 0;
        this.balancePay = 0;
        this.thirdPay = 0;
    }

    /**
     * @return Long 取得域 id 的方法。
     */
    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Long getId() {
        return this.id;
    }

    /**
     * @param id 对域 id 的设置方法.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return Long 取得域 patientId 的方法。
     */
    @Column(name = "patient_id")
    public Long getPatientId() {
        return this.patientId;
    }

    /**
     * @param patientId 对域 patientId 的设置方法.
     */
    public void setPatientId(Long patientId) {
        this.patientId = patientId;
    }

    /**
     * @return Long 取得域 doctorId 的方法。
     */
    @Column(name = "doctor_id")
    public Long getDoctorId() {
        return this.doctorId;
    }

    /**
     * @param doctorId 对域 doctorId 的设置方法.
     */
    public void setDoctorId(Long doctorId) {
        this.doctorId = doctorId;
    }

    /**
     * @return Integer 取得域 amount 的方法。
     */
    @Column(name = "amount")
    public Integer getAmount() {
        return this.amount;
    }

    /**
     * @param amount 对域 amount 的设置方法.
     */
    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    /**
     * @return Integer 取得域 payAmount 的方法。
     */
    @Column(name = "pay_amount")
    public Integer getPayAmount() {
        return this.payAmount;
    }

    /**
     * @param payAmount 对域 payAmount 的设置方法.
     */
    public void setPayAmount(Integer payAmount) {
        this.payAmount = payAmount;
    }

    /**
     * @return Integer 取得域 discountAmount 的方法。
     */
    @Column(name = "discount_amount")
    public Integer getDiscountAmount() {
        return this.discountAmount;
    }

    /**
     * @param discountAmount 对域 discountAmount 的设置方法.
     */
    public void setDiscountAmount(Integer discountAmount) {
        this.discountAmount = discountAmount;
    }

    /**
     * @return Integer 取得域 resourceType 的方法。
     */
    @Column(name = "resource_type")
    public Integer getResourceType() {
        return this.resourceType;
    }

    /**
     * @param resourceType 对域 resourceType 的设置方法.
     */
    public void setResourceType(Integer resourceType) {
        this.resourceType = resourceType;
    }

    /**
     * @return Date 取得域 createdAt 的方法。
     */
    @Column(name = "created_at")
    public Date getCreatedAt() {
        return this.createdAt;
    }

    /**
     * @param createdAt 对域 createdAt 的设置方法.
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * @return Date 取得域 payTime 的方法。
     */
    @Column(name = "pay_time")
    public Date getPayTime() {
        return this.payTime;
    }

    /**
     * @param payTime 对域 payTime 的设置方法.
     */
    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }

    /**
     * @return Integer 取得域 payStatus 的方法。
     */
    @Column(name = "pay_status")
    public Integer getPayStatus() {
        return this.payStatus;
    }

    /**
     * @param payStatus 对域 payStatus 的设置方法.
     */
    public void setPayStatus(Integer payStatus) {
        this.payStatus = payStatus;
    }

    /**
     * @return Integer 取得域 payType 的方法。
     */
    @Column(name = "pay_type", nullable = false)
    public Integer getPayType() {
        return this.payType;
    }

    /**
     * @param payType 对域 payType 的设置方法.
     */
    public void setPayType(Integer payType) {
        this.payType = payType;
    }

    /**
     * @return Integer 取得域 thirdType 的方法。
     */
    @Column(name = "third_type", nullable = false)
    public Integer getThirdType() {
        return this.thirdType;
    }

    /**
     * @param thirdType 对域 thirdType 的设置方法.
     */
    public void setThirdType(Integer thirdType) {
        this.thirdType = thirdType;
    }

    /**
     * @return Integer 取得域 balancePay 的方法。
     */
    @Column(name = "balance_pay", nullable = false)
    public Integer getBalancePay() {
        return this.balancePay;
    }

    /**
     * @param balancePay 对域 balancePay 的设置方法.
     */
    public void setBalancePay(Integer balancePay) {
        this.balancePay = balancePay;
    }

    /**
     * @return Integer 取得域 thirdPay 的方法。
     */
    @Column(name = "third_pay", nullable = false)
    public Integer getThirdPay() {
        return this.thirdPay;
    }

    /**
     * @param thirdPay 对域 thirdPay 的设置方法.
     */
    public void setThirdPay(Integer thirdPay) {
        this.thirdPay = thirdPay;
    }

}